package simple.string;

/**
 * <a href="https://leetcode.cn/problems/substrings-of-size-three-with-distinct-characters/description/">1876. 长度为三且各字符不同的子字符串</a>
 * 如果一个字符串不含有任何重复字符，我们称这个字符串为 好 字符串。
 * 给你一个字符串 s ，请你返回 s 中长度为 3 的 好子字符串 的数量。
 * 注意，如果相同的好子字符串出现多次，每一次都应该被记入答案之中。
 * 子字符串 是一个字符串中连续的字符序列。
 * 示例 1：
 *   输入：s = "xyzzaz"
 *   输出：1
 *   解释：总共有 4 个长度为 3 的子字符串："xyz"，"yzz"，"zza" 和 "zaz" 。
 *   唯一的长度为 3 的好子字符串是 "xyz" 。
 * 示例 2：
 *   输入：s = "aababcabc"
 *   输出：4
 *   解释：总共有 7 个长度为 3 的子字符串："aab"，"aba"，"bab"，"abc"，"bca"，"cab" 和 "abc" 。
 *   好子字符串包括 "abc"，"bca"，"cab" 和 "abc" 。
 * 提示：
 *   1 <= s.length <= 100
 *   s 只包含小写英文字母。
 * @author 刘学松
 * @date 2023-09-20 15:49
 */
public class 长度为三且各字符不同的子字符串 {
    public int countGoodSubstrings(String s) {
        if (s.length() < 3) {
            return 0;
        }
        char c1 = s.charAt(0), c2 = s.charAt(1);
        int index = 2, count = 0;
        while (c1 == c2 && index < s.length()) {
            c2 = s.charAt(index);
            index++;
        }
        while (index < s.length()) {
            char c3 = s.charAt(index);
            if (c3 == c2) {
                c1 = c2;
                index++;
                while (c1 == c2 && index < s.length()) {
                    c2 = s.charAt(index);
                    index++;
                }
                continue;
            }
            if (c3 != c1) {
                count++;
            }
            c1 = c2;
            c2 = c3;
            index++;
        }
        return count;
    }
}
